package com.zhoux.string;

/**
 * @author taoyi
 * @version 1.0
 * @date 2021/3/10 9:58
 *
 * 本类用于测试字符生成器 StringBuilder 和普通的字符串拼接
 */
public class String_Test {
    public static void main(String[] args) {
        String str = "";
        // 定义对字符串执行操作的起始时间
        long starTime = System.currentTimeMillis();
        for (int i = 0; i < 10 ; i++) { // 利用for循环执行10000次操作
            str += i;
        }
        long engTime = System.currentTimeMillis(); // 定义对字符串执行操作的结束时间
        long time = engTime-starTime;
        System.out.println("String消耗时间："+time);
        System.out.println("=======================================");

        /**
         * StringBuilder 的方法不是线程安全的（不能同步访问）。
         * 由于 StringBuilder 相较于 StringBuffer 有速度优势，
         * 所以多数情况下建议使用 StringBuilder 类。
         * 然而在应用程序要求线程安全的情况下，则必须使用 StringBuffer 类。
         */
        StringBuilder builder = new StringBuilder(); // 创建字符串生成器
        starTime = System.currentTimeMillis();
        for (int i = 0; i < 10 ; i++) {
            builder.append(i);
        }
        engTime = System.currentTimeMillis();
        time = engTime - starTime;
        System.out.println("StringBuilder消耗时间："+time);
        builder.setLength(20); // 设置字符序列的长度。
        System.out.println("builder当前容量："+builder.capacity());
        System.out.println(builder.toString());
        /**
         * insert(int offset, arg)方法：该方法用于向字符串生成器中的指定位置插入数据内容。
         * offset:字符串生成器的位置，该参数必须大于等于0，且小于等于此序列的长度
         * arg   : 将插入至字符串生成器的内容，该参数可以是任何的数据或其他数据或其他对象。
         */
        builder.ensureCapacity(35); // 确保容量至少等于指定的最小值。
        builder.insert(builder.length(),"zhoux");
        System.out.println("builder当前容量："+builder.capacity());
        System.out.println(builder.toString());
        builder.reverse();  // 将此字符序列用其反转形式取代。
        System.out.println(builder.toString());

    }
}

